package geral.manager;

import geral.util.FacesUtil;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

import aspecto.annotation.Permissao;
import br.com.sgc.entities.geral.Parametro;
import br.com.sgc.exception.ValidacaoException;
import br.com.sgc.permissao.Role;
import br.com.sgc.session.ParametroSession;

@Named
@ConversationScoped
public class ParametroManager extends GenericManager implements Serializable {

	private static final long serialVersionUID = 1345887546014505875L;

	private Parametro parametro = new Parametro();

	@EJB private ParametroSession parametroSession;

	@Inject	private UtilManager utilManager;

	@Permissao(role = Role.Sistema_Geral_Parametro_Visualizar)
	public String setup() {
		utilManager.getFuncaoManager().list();
		utilManager.getCargoManager().list();

		List<Parametro> parametros = parametroSession.findAll(Parametro.class, utilManager.getSegurancaManager().getUsuarioLogado().getClinica().getId(), true);
		parametro = parametros.size() == 1 ? parametros.get(0) : new Parametro();
		return "formParametro";
	}

	@Permissao(role = Role.Sistema_Geral_Parametro_Salvar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String save() {

		try {
			parametro.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
			parametroSession.save(parametro);
			return setup();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	@Permissao(role = Role.Sistema_Geral_Parametro_Atualizar)
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public String update() {

		try {
			parametro.setClinica(utilManager.getSegurancaManager().getUsuarioLogado().getClinica());
			parametroSession.update(parametro);
			return setup();

		//Erros de negócio
		} catch (ValidacaoException e) {
			e.printStackTrace();
			FacesUtil.mensWarn(e.getMessage());
		}

		return null;
	}

	public ParametroSession getParametroSession() {
		return parametroSession;
	}

	public void setParametroSession(ParametroSession parametroSession) {
		this.parametroSession = parametroSession;
	}

	public Parametro getParametro() {
		return parametro;
	}

	public void setParametro(Parametro parametro) {
		this.parametro = parametro;
	}

	public UtilManager getUtilManager() {
		return utilManager;
	}

	public void setUtilManager(UtilManager utilManager) {
		this.utilManager = utilManager;
	}
}
